Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.06.2012, 20:44
Vit Vit вне форума
Аспирант
Отправить личное сообщение для Vit Посмотреть профиль Найти все сообщения от Vit
 
Регистрация: 11.01.2012
Сообщений: 56

Ответ от сервера о окончании задачи
Всем доброго. Есть у меня задача следующего характера:
Отправить на сайт файл, при этом сам сервер выступает в качестве посредника - при приеме тела файла он по FTP передает его далее по цепочке
Проблема в следующем: при передаче контента файла (кой я открываю через FileAPI) я не могу (читай: не понимаю как) обработать ответ от сервера о успешной доставке на FTP. Предполагаю что это из-за того что отправка идет методом POST. Если же я передаю файл методом GET, то до сервера доходит только та его часть, которая скажем так читаема, т.е. не содержит бинарный код.
Отправку произвожу методом sendAsBinary.

Вопрос: Что можно придумать, дабы отправив на сервер файл, получить от него ответ - дошел таки файл или нет?
Ответить с цитированием
  #2 (permalink)  
Старый 16.06.2012, 21:47
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Vit,
Как вариант - направить ответ сервера в пустой фрейм, - по onload фрейма - считывать состояние загрузки
Ответить с цитированием
  #3 (permalink)  
Старый 16.06.2012, 22:07
Аспирант
Отправить личное сообщение для ILL-JAH Посмотреть профиль Найти все сообщения от ILL-JAH
 
Регистрация: 24.03.2011
Сообщений: 93

А может нужно использовать метод PUT?
Ответить с цитированием
  #4 (permalink)  
Старый 17.06.2012, 12:44
Vit Vit вне форума
Аспирант
Отправить личное сообщение для Vit Посмотреть профиль Найти все сообщения от Vit
 
Регистрация: 11.01.2012
Сообщений: 56

Цитата:
направить ответ сервера в пустой фрейм
Я с фреймами еще толком не знаком, поясни пожалуйста подробнее.
Цитата:
А может нужно использовать метод PUT?
А как его правильно использовать?
Если я ставлю так:
r=new FileReader();
	  r.onload=function(fLoad){
	   param=hnp()+'&FileName='+AFile.name+'&toFile='+toFile+'&FileContent='+fLoad.target.result;
	   a=ajax();
	   a.open("PUT",'Fload?',true);
	   a.onreadystatechange=handler;
	   a.sendAsBinary(param);
	  };
	  r.onerror=function(){alert("Ошибка. файл не загружен.");}
	  var con=r.readAsBinaryString(AFile);

То скрипт падает на методе sendAsBinary. Я вижу это в FireBug - запрос подсвечивается красным, как будто сервер недоступен.
Вообще PUT это стандартный метод? Я о нем даже не слышал.

Я вообще верно понял смысл FileAPI? Может я не верно делаю?
Ответить с цитированием
  #5 (permalink)  
Старый 17.06.2012, 13:08
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от Vit
Я с фреймами еще толком не знаком, поясни пожалуйста подробнее.
Если файл загружен не через input type=file c компа пользователя, то с фреймом достаточно пробематично
Для начала нун хотя бы решить задачу отправки бинарного файла на сервер

Вот,чем когда то пользовался для отправки бинарника

http://habrahabr.ru/post/112286/
http://habrahabr.ru/post/133351/
=============================

Последний раз редактировалось Deff, 17.06.2012 в 13:11.
Ответить с цитированием
  #6 (permalink)  
Старый 17.06.2012, 16:27
Vit Vit вне форума
Аспирант
Отправить личное сообщение для Vit Посмотреть профиль Найти все сообщения от Vit
 
Регистрация: 11.01.2012
Сообщений: 56

Цитата:
Если файл загружен не через input type=file
На данный момент именно его и использую
Цитата:
Для начала нун хотя бы решить задачу отправки бинарного файла на сервер
Решено. Файл успешно попадает (всеми своими байтами души) на сервер, который так же успешно заливает его на ФТП (Планируется передавать архивы - так что проверяется легко. Если файл на ФТП разархивировать можно, значит передача проходит на ура - чем и проверено).
Вот только допустим на ФТП заливать долго. Скажем минут 5-10, хотелось бы чтоб браузер меня предупредил о окончании работы сервера. Ибо после этого я из браузера планирую посылать команду на разархивирование и обработку контента архива.
Ответить с цитированием
  #7 (permalink)  
Старый 17.06.2012, 16:44
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от Vit
Скажем минут 5-10
Vit,
Поставить на страницу Аякс запрос о результе с таймированием через пол-минуты - минуты с отображением иконки загрузки, (по максимуму - прогрессбара
Ответить с цитированием
  #8 (permalink)  
Старый 17.06.2012, 17:30
Vit Vit вне форума
Аспирант
Отправить личное сообщение для Vit Посмотреть профиль Найти все сообщения от Vit
 
Регистрация: 11.01.2012
Сообщений: 56

Цитата:
с таймированием через пол-минуты
Думал уже об этом, но что-то эта идея не привлекла
А если работа завершится в период между опросами? Придется получается на сервере вводить хранилище, куда будет записываться результат обработки файла, который будет ждать очередного "таймерного" сеанса связи с запросом о новостях, все ли хорошо...
Как-то сложновато получается...

А POST вообще же ведь ждет ответа от сервера? Или он действует типа UDP - послал и забыл?
Ответить с цитированием
  #9 (permalink)  
Старый 17.06.2012, 17:41
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от Vit
А если работа завершится в период между опросами?
Работа чего ? - клиента ?
Так и так - выставляете в хранилище на серве время текущего запроса , и выставляете таймер критического времени ожидания

Другое дело есть спец языки и приложения имеющие встроенные методы...

Есть же чаты с постоянным перевозвратом данных
(Ксать тема от 9xakep Как работает ВК?
Ответить с цитированием
  #10 (permalink)  
Старый 17.06.2012, 18:26
Vit Vit вне форума
Аспирант
Отправить личное сообщение для Vit Посмотреть профиль Найти все сообщения от Vit
 
Регистрация: 11.01.2012
Сообщений: 56

Все, ребята! Разобрался.
Я ошибку искал не там, где она есть на самом деле.
Все дело в том что у меня для передачи файла организованны методы класса. Надо было просто аккуратно разобраться с вложениями.
Вот как нужно было писать:
handler:function(){
		if (this.readyState == 4){ 
		  if(this.status==200){
		   var a=this.responseText.substring(0,6);
		   if(a!=err) this.OnOk(this.responseText)
		   else this.OnFail(this.responseText);
		  };
		  if (this.status!=200){this.OnFail("Неудачная попытка связи.");}
		 }
		},
   SendFile:function(AFile,toFile,AOnOk,AOnFail){
	   if(!AOnOk)   {this._ajax.OnOk=OnOkToContent;}     else {this._ajax.OnOk=AOnOk;}
	   if(!AOnFail) {this._ajax.OnFail=OnFailToContent;} else {this._ajax.OnFail=AOnFail;}
      r=new FileReader();
	  r.Parent=this;
	  r.onload=function(fLoad){
	   param=hnp()+'&FileName='+AFile.name+'&toFile='+toFile+'&FileContent='+fLoad.target.result;
	   this.Parent._ajax.open("POST",'Fload?',true);
	   this.Parent._ajax.onreadystatechange=this.Parent.handler;
	   this.Parent._ajax.sendAsBinary(param);
	  };
	  r.onerror=function(){alert("Ошибка. файл не загружен.");}
	  var con=r.readAsBinaryString(AFile);
   },

А я писал a.onreadystatechange=handler;
Наивно полагая, что handler будет виден из Ридера
Глупо, блин, получилось...

Тогда если никто не против пожалуй последние два вопроса - У меня на форме в ячейке таблицы стоит
<td><input type="file" id="files" name="files[]" multiple class="inputtext" onchange="objppiska.ReadFile(event)"/></td>

Где
.inputtext {
  width: 100%;
  margin: 0;
  padding: 0;
  border: 0;
}

Однако эта зраза (input в смысле) не растягивается на всю ширь ячейки, оставляя лишь малюсенькое поле перед кнопкой, в котором не видно пути к файлу. Некрасиво смотрится. Можно ли заставить его растянуться на всю отведенный ему территорию ячейки?

И второй - Можно ли его заменить чем нибудь, что вызовет OpenDialog операционки, как делает этот тег, имеется ввиду может быть через JS вызвать этот диалог, получив имя файла? Или как вариант - скрыть с глаз этот инпут, вызывая в нужной функции его click?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как разложить ответ сервера по разным div-ам? brudershaft AJAX и COMET 0 23.04.2012 20:40
ответ сервера не сохраняется в глобальную переменную cyberpunk AJAX и COMET 2 06.03.2012 11:57
IE не распознает ответ от сервера в формате JSON DIMANSIM Internet Explorer 0 26.11.2011 22:08
Chrome firbug ответ с сервера nyols Общие вопросы Javascript 2 05.08.2011 12:19
Ответ сервера в плугине ajaxForm отдается неправильно. IgorOk jQuery 11 13.12.2009 04:35